import { IPSModelObject } from '../ipsmodel-object';
import { IPSSysSFPlugin } from '../res/ipssys-sfplugin';
import { IPSSubSysServiceAPIDEField } from './ipssub-sys-service-apidefield';
import { IPSSubSysServiceAPIDEMethod } from './ipssub-sys-service-apidemethod';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSSubSysServiceAPIDE
 */
export interface IPSSubSysServiceAPIDE extends IPSModelObject {
  /**
   * 接口模式
   * @description 值模式 [实体接口模式] {1：主接口、 0：从接口、 9：数据传输对象（DTO）嵌套成员 }
   * @type {( number | 1 | 0 | 9)}
   */
  aPIMode: number | 1 | 0 | 9;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 代码名称2（复数）
   * @type {string}
   */
  codeName2: string;

  /**
   * 实体标记
   * @type {string}
   */
  dETag: string;

  /**
   * 实体标记2
   * @type {string}
   */
  dETag2: string;

  /**
   * 逻辑名称
   * @type {string}
   */
  logicName: string;

  /**
   * 方法调用脚本代码
   * @type {string}
   */
  methodScriptCode: string;

  /**
   * 接口属性集合
   *
   * @type {IPSSubSysServiceAPIDEField[]}
   */
  getPSSubSysServiceAPIDEFields(): IPSSubSysServiceAPIDEField[] | null;

  /**
   * 接口属性集合
   *
   * @type {IPSSubSysServiceAPIDEField[]}
   */
  get psSubSysServiceAPIDEFields(): IPSSubSysServiceAPIDEField[] | null;

  findPSSubSysServiceAPIDEField(objKey: any): IPSSubSysServiceAPIDEField | null;

  /**
   * 外部接口实体方法集合
   *
   * @type {IPSSubSysServiceAPIDEMethod[]}
   */
  getPSSubSysServiceAPIDEMethods(): IPSSubSysServiceAPIDEMethod[] | null;

  /**
   * 外部接口实体方法集合
   *
   * @type {IPSSubSysServiceAPIDEMethod[]}
   */
  get psSubSysServiceAPIDEMethods(): IPSSubSysServiceAPIDEMethod[] | null;

  findPSSubSysServiceAPIDEMethod(objKey: any): IPSSubSysServiceAPIDEMethod | null;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 主接口
   * @type {boolean}
   * @default false
   */
  major: boolean;

  /**
   * 嵌套成员
   * @type {boolean}
   * @default false
   */
  nested: boolean;
}
